package _17_剑指Offer;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class _17_剑指Offer打印从1到最大的n位数 {

    public static void main(String[] args) {

        _17_剑指Offer打印从1到最大的n位数 v = new _17_剑指Offer打印从1到最大的n位数();

        List<String> strings = v.printNumbers(2);

        for (String string : strings) {
            System.out.println(string);
        }

    }
    private List<String> str;

    // 考虑大数情况，如果字符串很大，即使是Long类型也无法承载，所以对n为排列组成字符串会比较合适
    public List<String> printNumbers(int n) {
        // 计算所有值
        str = new ArrayList<>();
        for (int i = 1; i <= n; i++) {
            char[] list = new char[i];
            for (char j = '1'; j <= '9'; j++) {
                // 固定首位
                list[0] = j;
                dfs(i, list, 1);
            }
        }
        return str;
    }

    private void dfs(int len, char[] list, int index) {
        if (index == len) {
            str.add(new String(list));
            return;
        }

        for (char i = '0'; i <= '9'; i++) {
            list[index] = i;
            dfs(len, list, index + 1);
        }
    }


    // 未考虑大数情况
    public int[] printNumbers1(int n) {
        int end = (int) (Math.pow(10, n) - 1);
        int[] ins = new int[end];
        for (int i = 1; i <= end; i++) {
            ins[i] = i;
        }
        return ins;
    }

}
